package org.osiris.client.requisitos;

import java.util.ArrayList;
import java.util.List;

import org.osiris.client.Privado;
import org.osiris.client.comandos.ComandoAltaRequisito;
import org.osiris.client.model.EstadorequisitoViewBean;
import org.osiris.client.model.ProyectoViewBean;
import org.osiris.client.model.RequisitoViewBean;
import org.osiris.client.model.TipoRequisitoViewBean;
import org.osiris.client.model.UsuarioViewBean;
import org.osiris.client.services.BussinessInterfaceService;
import org.osiris.client.services.BussinessInterfaceServiceAsync;
import org.osiris.client.utils.MasterGenerator;

import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.VerticalPanel;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.LabelField;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;

public class BusquedaRequisitos extends LayoutContainer {

	UsuarioViewBean usuario;
	private final ColumnConfig clmncnfgAutor = new ColumnConfig("autor", "Autor", 150);
	
	
	ListStore<RequisitoViewBean> requisitos=new ListStore<RequisitoViewBean>(); 
	final BussinessInterfaceServiceAsync bussinessInterfaceServiceAsync=BussinessInterfaceService.Util.getInstance();
	
	public BusquedaRequisitos(UsuarioViewBean user) {
		setSize("902", "535");
		usuario=user;
		VerticalPanel verticalPanel = new VerticalPanel();
		verticalPanel.setSpacing(5);
		
		HorizontalPanel horizontalPanel = new HorizontalPanel();
		horizontalPanel.setSpacing(5);
		
		LabelField lblfldNombre = new LabelField("Nombre");
		horizontalPanel.add(lblfldNombre);
		
		final TextField<String> nombre = new TextField<String>();
		horizontalPanel.add(nombre);
		nombre.setWidth("100");
		
		
		LabelField lblfldDetalle = new LabelField("Detalle");
		horizontalPanel.add(lblfldDetalle);
		
		final TextField<String> detalle = new TextField<String>();
		horizontalPanel.add(detalle);
		detalle.setWidth("100");
		
		
		LabelField lblfldEstado = new LabelField("Estado");
		horizontalPanel.add(lblfldEstado);
		
		final ComboBox<EstadorequisitoViewBean> estado = MasterGenerator.getEstadosCombo();
		
		horizontalPanel.add(estado);
		
		
		LabelField lblfldId = new LabelField("ID");
		horizontalPanel.add(lblfldId);
		
		final TextField<String> id = new TextField<String>();
		horizontalPanel.add(id);
		
		LabelField lblfldTipo = new LabelField("Tipo");
		horizontalPanel.add(lblfldTipo);
		
		final ComboBox<TipoRequisitoViewBean> tipo = MasterGenerator.getComboTipos();
		horizontalPanel.add(tipo);
		verticalPanel.add(horizontalPanel);
		
		HorizontalPanel horizontalPanel_1 = new HorizontalPanel();
		horizontalPanel_1.setSpacing(5);
		
		LabelField lblfldProyecto = new LabelField("Proyecto");
		horizontalPanel_1.add(lblfldProyecto);
		
		final ComboBox<ProyectoViewBean> proyecto = MasterGenerator.getCombosProyectos();
		horizontalPanel_1.add(proyecto);
		
		LabelField lblfldAutor = new LabelField("Autor");
		horizontalPanel_1.add(lblfldAutor);
		
		final ComboBox<UsuarioViewBean> autor = MasterGenerator.getComboUsuarios();
		horizontalPanel_1.add(autor);
		
		
		LabelField lblfldref = new LabelField("Referencia");
		horizontalPanel_1.add(lblfldref);
		
		final TextField<String> referencia=new TextField<String>(); 
		horizontalPanel_1.add(referencia);
		
		LabelField lblfldresp = new LabelField("Responsable");
		horizontalPanel_1.add(lblfldresp);
		
		final ComboBox<UsuarioViewBean> responsable = MasterGenerator.getComboUsuarios();
		horizontalPanel_1.add(responsable);
		
		Button btnFiltrar = new Button("Filtrar");
		btnFiltrar.addSelectionListener(new SelectionListener<ButtonEvent>() {
			public void componentSelected(ButtonEvent ce) {
				String au=null;
				String resp=null;
				
				ProyectoViewBean pr = null;
				
				try{pr=proyecto.getSelection().get(0);}catch(Exception me){}
				try{resp=responsable.getSelection().get(0).getidUsuario().toString();}catch(Exception me){}
				TipoRequisitoViewBean tip = null;
				try{
					tip=tipo.getSelection().get(0);
				}catch(Exception me){}
				
				EstadorequisitoViewBean es = null;try{
					es=estado.getSelection().get(0);
				}catch(Exception me){}
				try{autor.getSelection().get(0).getidUsuario().toString();}catch(Exception me){}
				AsyncCallback<List<RequisitoViewBean>> callback=new AsyncCallback<List<RequisitoViewBean>>(){

					@Override
					public void onFailure(Throwable caught) {
						Privado.mostrarMensaje("Busqueda", "Error buscando requisitos:"+caught.toString());
						
					}

					@Override
					public void onSuccess(List<RequisitoViewBean> result) {
						requisitos.removeAll();
						if(result!=null){
							requisitos.add(result);
						}
						
					}
					
				};
				Long iden=null;
				try{
					iden=Long.parseLong(id.getValue());
				}catch(Exception me){}
				bussinessInterfaceServiceAsync.buscarRequisitos(
						au, 
						null, 
						detalle.getValue(), 
						null, null, null, es, iden, 
						null, tip, nombre.getValue(), null, referencia.getValue(), 
						resp, null, pr,null,false,callback);
				
			}
		});
		horizontalPanel_1.add(btnFiltrar);
		verticalPanel.add(horizontalPanel_1);
		List<ColumnConfig> configs = new ArrayList<ColumnConfig>();
		ColumnConfig clmncnfgId = new ColumnConfig("idRequisito", "ID", 80);
		configs.add(clmncnfgId);
		
		ColumnConfig clmncnfgNombre = new ColumnConfig("nombre", "Nombre", 150);
		configs.add(clmncnfgNombre);
		configs.add(clmncnfgAutor);
		
		ColumnConfig clmncnfgReferencia = new ColumnConfig("referencia", "Referencia", 150);
		configs.add(clmncnfgReferencia);
		
		ColumnConfig clmncnfgDescripcin = new ColumnConfig("descripcion", "Descripci\u00F3n", 150);
		configs.add(clmncnfgDescripcin);
		
		ColumnConfig clmncnfgFechaAlta = new ColumnConfig("fechaalta", "Fecha Alta", 150);
		configs.add(clmncnfgFechaAlta);
		
		ColumnConfig clmncnfgSubcategoria = new ColumnConfig("subcategoria", "Subcategoria", 150);
		configs.add(clmncnfgSubcategoria);
		
		ColumnConfig clmncnfgTipo = new ColumnConfig("idTipoRequisito", "Tipo", 150);
		configs.add(clmncnfgTipo);
		
		ColumnConfig clmncnfgResponsable = new ColumnConfig("responsable", "Responsable", 150);
		configs.add(clmncnfgResponsable);
		
		ColumnConfig clmncnfgPr= new ColumnConfig("idComplejidadRequisito", "Complejidad", 150);
		configs.add(clmncnfgPr);
		
		final Grid <RequisitoViewBean> grid = new Grid<RequisitoViewBean>(requisitos, new ColumnModel(configs));
		verticalPanel.add(grid);
		grid.setSize("890", "400");
		grid.setBorders(true);
		
		HorizontalPanel horizontalPanel_2 = new HorizontalPanel();
		horizontalPanel_2.setSpacing(5);
		
		Button btnConsulta = new Button("Consulta");
		btnConsulta.addSelectionListener(new SelectionListener<ButtonEvent>() {
			public void componentSelected(ButtonEvent ce) {
				RequisitoViewBean sel = grid.getSelectionModel().getSelectedItem();
				GWT.log("Seleccionado:"+sel);
				ComandoAltaRequisito req=new ComandoAltaRequisito(usuario,sel);
				req.execute();
			}
		});
		horizontalPanel_2.add(btnConsulta);
		verticalPanel.add(horizontalPanel_2);
		
		Button btnAlta = new Button("Alta");
		btnAlta.addSelectionListener(new SelectionListener<ButtonEvent>() {
			public void componentSelected(ButtonEvent ce) {
				ComandoAltaRequisito req=new ComandoAltaRequisito(usuario,null);
				req.execute();
			}
		});
		horizontalPanel_2.add(btnAlta);
		add(verticalPanel);
		
		usuario=user;
	}

}
